import axios from 'axios'
import { Toast } from 'vant'
import store from '@/store/index'
import bigInt from 'json-bigint'
import { exchangeTokenAPI } from '@/api/userapi.js'
import router from '@/router/index.js'
// 导入router模块
// import router from '@/router/index.js'
const transBigInt = (data) => {
  if (!data) return ''
  return bigInt.parse(data)
}

const instance = axios.create({
  baseURL: 'http://toutiao-app.itheima.net',
  transformResponse: [transBigInt]
})
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  Toast.loading({
    message: '加载中..',
    duration: 0
  })
  // 添加请求头authrization
  const tokenStr = store.state.tokenInfo.token
  if (tokenStr) {
    config.headers.Authorization = `Bearer ${tokenStr}`
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// // 添加响应拦截器
// instance.interceptors.response.use(function (response) {
//   Toast.clear()
//   // 对响应数据做点什么
//   return response
// }, function (error) {
//   Toast.clear()

//   if (error.response && error.response.status === 401) {
//     console.log('token过期了')
//     // token过期执行清除操作，调用vuex中的clearState方法，
//     store.commit('clearState')
//     // token过期，强制跳转到登录页面
//     // 优化跳转
//     console.log(router)
//     router.push('/login?pre=' + router.currentRoute.fullPath)
//   }
//   // 对响应错误做点什么
//   return Promise.reject(error)
// })
// 添加响应拦截器
instance.interceptors.response.use(function (response) {
  Toast.clear()
  // 对响应数据做点什么
  return response
}, async function (error) {
  Toast.clear()

  const tokenInfo = store.state.tokenInfo
  if (error.response && error.response.status === 401 && tokenInfo.refresh_token) {
    console.log('换取token')
    try {
      const { data: res } = await exchangeTokenAPI(tokenInfo.refresh_token)
      if (res.message === 'OK') {
        console.log(tokenInfo.refresh_token)
        // 更新token值
        store.commit('updateTokenInfo', { token: res.data.token, refresh_token: tokenInfo.refresh_token })
        return instance(error.config)
      }
    } catch {
      store.commit('clearState')
      router.push('/login?pre=' + router.currentRoute.fullPath)
    }
  }
  // 对响应错误做点什么
  return Promise.reject(error)
})

export default instance
